# frozen_string_literal: true

# Colorizes the output of the standard library logger, depending on the logger level:
# To adjust the colors, look at Logger::Colors::SCHEMA and Logger::Colors::constants

require 'logger'

class Logger
  module Colors
    VERSION = '1.0.0'

    NOTHING = '0;0'
    BLACK = '0;30'
    RED = '0;31'
    GREEN = '0;32'
    BROWN = '0;33'
    BLUE = '0;34'
    PURPLE = '0;35'
    CYAN = '0;36'
    LIGHT_GRAY = '0;37'
    DARK_GRAY = '1;30'
    LIGHT_RED = '1;31'
    LIGHT_GREEN = '1;32'
    YELLOW = '1;33'
    LIGHT_BLUE = '1;34'
    LIGHT_PURPLE = '1;35'
    LIGHT_CYAN = '1;36'
    WHITE = '1;37'

    SCHEMA = {
      STDOUT => %w[nothing green brown red purple cyan],
      STDERR => %w[nothing green yellow light_red light_purple light_cyan]
    }.freeze
  end
end

class Logger
  alias format_message_colorless format_message

  def format_message(level, *args)
    if Logger::Colors::SCHEMA[@logdev.dev]
      color = begin
        Logger::Colors.const_get Logger::Colors::SCHEMA[@logdev.dev][Logger.const_get(level.sub('ANY', 'UNKNOWN'))].to_s.upcase
              rescue NameError
                '0;0'
      end
      "\e[#{color}m#{format_message_colorless(level, *args)}\e[0;0m"
    else
      format_message_colorless(level, *args)
    end
  end
end
